#pragma once

#if(defined DEBUG||defined _DEBUG)
# define BOT_DEBUG
#endif

namespace BoT {
  // Hooks for stuff that everyone implements differently.

  typedef void (*AssertFunction)(int file, int line, const char* msg);
  typedef void (*LogFunction)(const char* msg);

  extern AssertFunction GlobalAssertFunction;
  extern LogFunction GlobalLogFunction;

  void DefaultAssertFunction(int file, int line, const char* msg);
  void DefaultLogFunction(const char* msg);

}

#ifdef BOT_DEBUG
# define BOT_ASSERT(cond, msg) if((cond)){BoT::GlobalAssertFunction(__FILE__,__LINE__,(msg));}
#else
# define BOT_ASSERT(cond, msg)
#endif
